Skip to content

Conversation

@vboussot
Copy link
Contributor

@vboussot vboussot commented Dec 5, 2025

New extension

Tier 1

Any extension that is listed in the Extensions Catalog must fulfill these requirements.

  • Extension has a reasonable name (not too general, not too narrow, suggests what the extension is for). The extension name should not start with Slicer (unless it explicitly provides a bridge between Slicer and a tool or library), because it would make it more difficult to find extensions if the name of many started with the same word.
  • Repository name is Slicer+ExtensionName (except if the repository that hosts the extension can be also used without Slicer)
  • Repository is associated with 3d-slicer-extension GitHub topic so that it is listed here. To edit topics, click the settings icon in the right side of "About" section header and enter 3d-slicer-extension in "Topics" and click "Save changes". To learn more about topics, read https://help.github.com/en/articles/about-topics
  • Extension description summarizes in 1-2 sentences what the extension is usable (should be understandable for non-experts)
  • Any known related patents must be mentioned in the extension description.
  • LICENSE.txt is present in the repository root and the name of the license is mentioned in extension homepage. We suggest you use a permissive license that includes patent and contribution clauses. This will help protect developers and ensure the code remains freely available. MIT (https://choosealicense.com/licenses/mit/) or Apache (https://choosealicense.com/licenses/apache-2.0/) license is recommended. Read here to learn more about licenses. If source code license is more restrictive for users than MIT, BSD, Apache, or 3D Slicer license then describe the reason for the license choice and include the name of the used license in the extension description.
  • Extension URL and revision (scmurl, scmrevision) is correct, consider using a branch name (main, release, ...) instead of a specific git hash to avoid re-submitting pull request whenever the extension is updated
  • Extension icon URL is correct (do not use the icon's webpage but the raw data download URL that you get from the download button - it should look something like this: https://raw.githubusercontent.com/user/repo/main/SomeIcon.png)
  • Screenshot URLs (screenshoturls) are correct, contains at least one
  • Content of submitted json file is consistent with the top-level CMakeLists.txt file in the repository (dependencies, etc. are the same)
  • Homepage URL points to valid webpage containing the following:
    • Extension name
    • Short description: 1-2 sentences, which summarizes what the extension is usable for
    • At least one nice, informative image, that illustrates what the extension can do. It may be a screenshot.
    • Description of contained modules: at one sentence for each module
    • Publication: link to publication and/or to PubMed reference (if available)
  • Hide unused github features (such as Wiki, Projects, and Discussions, Releases, Packages) in the repository to reduce noise/irrelevant information:
    • Click Settings and in repository settings uncheck Wiki, Projects, and Discussions (if they are currently not used).
    • Click the settings icon next to About in the top-right corner of the repository main page and uncheck Releases and Packages (if they are currently not used)
  • The extension is safe:
    • Does not include or download binaries from unreliable sources
    • Does not send any information anywhere without user consent (explicit opt-in is required)

Tier 3

Community-supported extensions.

  • Documentation, tutorial, and test data are provided for most modules. A tutorial provides step-by-step description of at least the most typical use case, include a few screenshots. Any sample data sets that is used in tutorials must be registered with the Sample Data module to provide easy access to the user.
  • Follows programming and user interface conventions of 3D Slicer (e.g., GUI and logic are separated, usage of popups is minimized, no unnecessary custom GUI styling, etc.)
  • The extension can be successfully built and packaged on all supported platforms (Windows, macOS, Linux)
  • Maintainers respond to issues and pull request submitted to the extension's repository.
  • Maintainers respond to questions directly addressed to him/her via @mention on the Slicer Forum.
  • Permissive license is used for the main functions of the extension (recommended Apache or MIT). The extension can provide additional functionality in optional components that are distributed with non-permissive license, but the user has to explicitly approve those before using them (e.g., a pop-up can be displayed that explains the licensing terms and the user has to acknowledge them to proceed).
  • All requirements of tiers < 3.

Tier 5

Critically important extensions, supported by Slicer core developers. New Slicer Stable Release is released only if all Tier 5 extension packages are successfully created on all supported platforms.

  • Slicer core developers accept the responsibility of fixing any issues caused by Slicer core changes; at least one Slicer core developer (anyone who has commit right to Slicer core) must be granted commit right to the extension's repository.
  • Automated tests for all critical features.
  • Maintainers respond to questions related to the extension on the Slicer Forum.
  • All requirements of tiers < 5.

This PR adds ImpactSynth, a new extension enabling synthetic CT (sCT) generation from MRI or CBCT directly inside 3D Slicer, specifically designed for radiotherapy workflows.

Slicer IMPACT-Synth provides a dedicated GUI for the IMPACT-Synth framework and leverages KonfAI Apps for fast and fully configurable inference pipelines.
It integrates state-of-the-art models from the SynthRAD2025 Challenge (ranked 3rd in both MRI→CT and CBCT→CT tasks) and includes embedded evaluation and uncertainty workflows to support clinical Quality Assurance.


Included capabilities

Image Synthesis

  • MRI ➜ CT generation
  • CBCT ➜ CT generation

Segmentation & QA

  • Automatic anatomical segmentation of input and generated volumes
  • Quantitative metrics (e.g., Dice, MAE, PSNR, MS-SSIM)
  • Synchronized 2D/3D inspection of predictions
  • Exportable uncertainty maps for dose propagation

Integration-focused design

  • GPU acceleration when available
  • One-click execution of the full workflow
  • Based on KonfAI Apps, enabling transparent workflows and versioning
  • Future compatibility with IMPACT-Reg for dose accumulation

We welcome feedback and suggestions from the Slicer team!

@vboussot
Copy link
Contributor Author

vboussot commented Dec 18, 2025

@lassoan Just a small suggestion regarding the category name for ImpactSynth.

The category “Image Synthesis” already exists in the Slicer Extensions Index and actually matches ImpactSynth very well.
However, for consistency with the other categories (e.g. Segmentation rather than Image Segmentation), using “Synthesis” only could be more aligned with the current naming scheme.

What do you think?

@lassoan
Copy link
Contributor

lassoan commented Dec 18, 2025

Both "Image Synthesis" and "Segmentation" sound good to me. I understand that neither of them is perfect. Our plan is to replace a single category by a list of tags, but until this infrastructure update is ready then we would like to freeze the category list and put all extensions into existing categories. I let you decide which category you choose for now, and we'll work on adding the tag system to allow more accurate characterization in the long term.

@vboussot
Copy link
Contributor Author

vboussot commented Dec 18, 2025

I was not suggesting introducing a new category, but commenting on naming consistency. Since existing categories use a single-noun form (e.g. Segmentation, Registration) without explicitly mentioning image, my suggestion was that Synthesis would be more consistent than Image Synthesis.

That said, since the category list is currently frozen and changes are not desired at this time, I will use Image Synthesis.

@lassoan
Copy link
Contributor

lassoan commented Dec 18, 2025

The rationale behind using "Image synthesis" was that "Synthesis" can mean so many things in different contexts, that the word by itself has almost no information content. Since we will replace single category by multiple tags soon, I would suggest not to spend time on trying to fix the category names now.

@lassoan
Copy link
Contributor

lassoan commented Dec 18, 2025

I'm reviewing what SlicerImpactSynth extension and it seems that it very heavily relies on SlicerKonfAI - so much that it ends up being really, really small, just about 100 lines of code. Since maintaining and supporting an extension requires some effort, we usually add all very tightly linked modules into a single extension. ImpactReg module could be added to the KonfAI extension, too. What was the motivation for creating separate extensions for ImpactSynth and ImpactReg?

@vboussot
Copy link
Contributor Author

The three extensions serve distinct and non-overlapping roles:

  1. SlicerKonfAI is a general-purpose backend for executing deep learning models packaged as KonfAI Apps, supporting inference, evaluation, and uncertainty estimation.

  2. ImpactSynth is a task-specific application dedicated to medical image synthesis. It exposes multiple synthesis-oriented KonfAI Apps through a focused user interface. ImpactSynth is intended to evolve along a synthesis-specific clinical roadmap, with planned support for additional synthesis-related functionality, such as radiotherapy-oriented workflows and dose-based evaluation. For this reason, it is intentionally kept separate from SlicerKonfAI, which is designed to remain a generic, task-agnostic execution backend.

  3. ImpactReg is a dedicated multimodal image registration module built on top of Elastix, integrating the IMPACT similarity metric within a classical, optimization-based registration framework. It is not a KonfAI App and shares only minimal infrastructure with SlicerKonfAI, limited to GPU management and execution lifecycle handling.

To minimize duplication and maintenance overhead, shared functionality is deliberately consolidated in SlicerKonfAI. This backend provides reusable infrastructure for GPU management, logging, and execution lifecycle handling, while remaining agnostic to any specific clinical task.

As a result, ImpactReg and especially ImpactSynth are intentionally lightweight. This is a deliberate design choice and a direct consequence of centralizing generic functionality within a single, well-defined backend.

Merging these extensions would blur the separation between generic deep learning inference, synthesis-specific applications, and registration workflows, thereby reducing architectural clarity and complicating future evolution.

Keeping the extensions separate ensures clear responsibilities, independent evolution paths, and improved clinical discoverability. From a user perspective, this separation is more intuitive: synthesis, registration, and execution infrastructure are handled by distinct extensions with non-overlapping scopes, allowing users to immediately understand the purpose of each component without being exposed to unrelated functionality.

@lassoan
Copy link
Contributor

lassoan commented Dec 19, 2025

The separation between generic infrastructure and specific applications, scopes, responsibilities, evolution paths, etc. is very important and it is meant to be achieved by having multiple modules in an extension. It is valid to create a separate extension for each module, but it results in unnecessary fragmentation and more complicated maintenance and user support. The only advantage may be that you get 3 entries in the extensions index, so if people browse extension names then they probably recognize that the "ImpactReg" extension is related, but they may not realize that "KonfAI" is relevant (this may be addressed in the future by introducing tags in the extension description).

Fragmentation of code across multiple extensions is a significant burden for the extension maintainers, but not for Slicer maintainers, so if you feel confident that you want to proceed with this - and it seems you are - then it is not a problem for us.

@lassoan
Copy link
Contributor

lassoan commented Dec 19, 2025

I've noticed that you have not checked:

  • Maintainers respond to issues and pull request submitted to the extension's repository.
  • Maintainers respond to questions directly addressed to him/her via @mention on the Slicer Forum.

Does this mean that you would not like to make the commitment to respond to issues and pull requests and creating an account on the Slicer forum so that you can be @mentioned? That's not a problem, but then we would set your extension description to be Tier 2.

@vboussot
Copy link
Contributor Author

Yes, I do prefer to keep these components as separate extensions in order to clearly reflect three distinct categories. There is no redundant code across the three extensions, as shared functionality is centralized, which keeps the maintenance overhead minimal. I am also comfortable keeping these extensions up to date with ongoing Slicer developments.

Regarding the checkboxes, I was not initially sure whether checking these boxes was meant to indicate that I already respond to issues and forum questions, or whether it represented a commitment to do so. I do intend to take on this responsibility, and I have now checked both items to reflect my commitment to responding to issues, pull requests, and questions addressed to me on the Slicer Forum.

Copy link
Contributor

@lassoan lassoan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All sounds good, this is ready to be merged.

@lassoan lassoan merged commit e0d655b into Slicer:main Dec 19, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants